package com.shut.vehicle.dao;

import com.shut.vehicle.pojo.ServiceRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author 卢斌
 */
@Mapper
public interface ServiceRecordDao {


    void createServiceRecord(ServiceRecord record);


    /**
     * 获取一个未完成的服务记录
     *
     * @param userId    用户ID
     * @param deviceId  设备ID
     * @return  未完成的服务记录
     */
    ServiceRecord getUnfinishedService(@Param("userId") Integer userId, @Param("deviceId") Integer deviceId);


    /**
     * 完成某服务
     *
     * @param serviceId     服务记录ID
     * @param finishTime    完成时间
     */
    Integer finishService(@Param("serviceId") Integer serviceId, @Param("finishTime") Long finishTime);


    /**
     * ID查询服务记录
     *
     * @param serviceId 服务记录ID
     * @return  服务记录
     */
    ServiceRecord getServiceRecord(@Param("serviceId") Integer serviceId);


    /**
     * 设置预约后长时间未拍摄的预约记录为失效
     *
     * @param limitFinishTime   截止完成时间
     */
    void cleanUnFinishedService(@Param("limitFinishTime") Date limitFinishTime, @Param("ignoreRecordIds") Set<Integer> ignoreRecordIds);


    /**
     * 搜索服务记录
     *
     * @param deviceId      设备ID
     * @param userId        用户ID
     * @param hasFinished   是否完成
     * @return  服务记录
     */
    List<ServiceRecord> listServiceRecord(@Param("deviceId") Integer deviceId, @Param("userId") Integer userId, @Param("hasFinished") Boolean hasFinished);


    /**
     * ID集合获取服务记录列表
     *
     * @return  服务记录
     */
    List<ServiceRecord> listRecordAfterFinishTime(@Param("finishTime") Long finishTime);

}
